/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package diseño09.entidades;

import diseño09.controles.GestorDePartidosFechasYClubes;
import java.util.Calendar;

/**
 *
 * @author aguwolky
 */
public class EquipoFantasia implements Cloneable{

    private int idEquipo;
    private Fecha fechaVigencia;
    private String nombre;
    private long presupuesto;
    private Jugador[] jugadores;
    private int puntajeTotal;
    private short transferenciasRestantes;
    private String horaCreacion;
    private String fechaCreacion;
 

    public EquipoFantasia(){
        super();
        presupuesto=50000;
        transferenciasRestantes=3;
        jugadores=new Jugador[15];
    }

    public EquipoFantasia(String unNombre){
        super();
        GestorDePartidosFechasYClubes gpfc = new GestorDePartidosFechasYClubes();
        nombre=unNombre;
        presupuesto=50000;
        transferenciasRestantes=3;
        jugadores=new Jugador[15];

        this.fechaVigencia=gpfc.obtenerFechaActual();
       
    }

    public EquipoFantasia(int idEquipo, String unNombre, String fechaCreacion, String horaCreacion,
                        int cambiosDisponibles, int puntajeTotal){
        super();
        GestorDePartidosFechasYClubes gpfc = new GestorDePartidosFechasYClubes();
        this.idEquipo=idEquipo;
        nombre=unNombre;
        presupuesto=50000;
        transferenciasRestantes=(short)cambiosDisponibles;
        jugadores=new Jugador[15];
        this.fechaCreacion=fechaCreacion;
        this.horaCreacion=horaCreacion;
        this.puntajeTotal=puntajeTotal;
        this.fechaVigencia=gpfc.obtenerFechaActual();

    }

    public static void main(String args[]) {

    }

    public int getPosicion(Jugador unJugador){
        int i=0;
        boolean flag=false;
        while(!flag){
            if(unJugador.getID()==jugadores[i].getID())
                flag=true;
            i++;
        }
        return --i;
    }

    public void sustituir(Jugador unJugador){
        int i=getPosicion(unJugador);
        Jugador nuevoSuplente;
        switch(i){
            case 0: nuevoSuplente=jugadores[11];
                    jugadores[11]=jugadores[i];
                    jugadores[i]=nuevoSuplente;
                    break;
            case 1:
            case 2:
            case 3:
            case 4: nuevoSuplente=jugadores[12];
                    jugadores[12]=jugadores[i];
                    jugadores[i]=nuevoSuplente;
                    break;
            case 5:
            case 6:
            case 7: nuevoSuplente=jugadores[13];
                    jugadores[13]=jugadores[i];
                    jugadores[i]=nuevoSuplente;
                    break;
            case 8:
            case 9:
            case 10: nuevoSuplente=jugadores[14];
                     jugadores[14]=jugadores[i];
                     jugadores[i]=nuevoSuplente;
                     break;

        }
    }

    public void setTransferenciaRestante(int unaTransferenciaRestante){
        
    }

    public void setPresupuesto(long unPresupuesto){

    }

    public void setID(int idNuevo){
        idEquipo=idNuevo;
    }

    public void setJugador(Jugador unJugador){
        presupuesto -= unJugador.getCotizacion();

        int puesto=unJugador.getPosicion();

        int i=0, j=0, suplente=0;

        switch(puesto){
            case 1: if(jugadores[0]==null)
                        jugadores[0]=unJugador;
                    else
                        jugadores[11]=unJugador;
                    return;
            case 2: i=1; j=5; suplente=12; break;
            case 3: i=5; j=8; suplente=13; break;
            case 4: i=8; j=11; suplente=14; break;
        }

        while(i<j){
            if(jugadores[i]==null){
                jugadores[i]=unJugador;
                return;
            }
            i++;
        }
        
        jugadores[suplente]=unJugador;
    }

    public void setHoraCreacion(){
        Calendar c= Calendar.getInstance();

        horaCreacion=(c.get(Calendar.HOUR)+1)+":"
                     +c.get(Calendar.MINUTE)+":"
                     +c.get(Calendar.SECOND);
    }

    public void setFechaCreacion(){
        Calendar c= Calendar.getInstance();
        
        fechaCreacion=c.get(Calendar.YEAR)+"-"
                    +(c.get(Calendar.MONTH)+1)+"-"
                    +c.get(Calendar.DATE);
    }

    public void setPuntajeTotal(int unPuntajeTotal){

    }

    public void setFechaVigencia(Fecha unaFechaVigencia){
        fechaVigencia=unaFechaVigencia;
    }

    public void setNombre(String unNombre){
        nombre=unNombre;
    }

    public String getHoraCreacion(){
        return horaCreacion;
    }

    public String getFechaCreacion(){
        return fechaCreacion;
    }

    public int getTransferenciasRestantes(){
        return transferenciasRestantes;
    }

    public int getID(){
        return idEquipo;
    }

    public String getNombre(){
        return nombre;
    }

    public int getPuntajeTotal(){
        return puntajeTotal;
    }

    public long getPresupuesto(){
        return presupuesto;
    }

    public Jugador[] getJugadores(){
        return jugadores;
    }

    public Fecha getFechaVigencia(){
        return fechaVigencia;
    }

    public void quitarJugador(Jugador unJugador){

        int i=0;
        while(i<15){
            if(jugadores[i]!=null && jugadores[i].getID()==unJugador.getID()){
                jugadores[i]=null;
                presupuesto+=unJugador.getCotizacion();
                return;
            }
            i++;
        }

    }

    public void actualizarPuntajeTotal(int unPuntaje){
        puntajeTotal+=unPuntaje;
    }

    public boolean esTitular(Jugador unJugador){
        int i=0;
        boolean flag=false;
        while(!flag){
            if(unJugador.getID()==jugadores[i].getID())
                flag=true;
            i++;
        }
        return --i<11;
    }

    public Jugador getJugador(int posicion) {
        return jugadores[posicion];
    }

    public int cantArqueros() {
        int i=0;
        if(jugadores[0]!=null)
            i++;
        if(jugadores[11]!=null)
            i++;
        return i;
    }

    public int cantDefensores() {
        int i=0,j;

        for(j=1; j<5; j++)
            if(jugadores[j]!=null)
                i++;

        if(jugadores[12]!=null)
            i++;

        return i;
    }

    public int cantVolantes() {
        int i=0,j;

        for(j=5; j<8; j++)
            if(jugadores[j]!=null)
                i++;

        if(jugadores[13]!=null)
            i++;
        
        return i;
    }
    
    public int cantDelanteros() {
        int i=0,j;

        for(j=8; j<11; j++)
            if(jugadores[j]!=null)
                i++;

        if(jugadores[14]!=null)
            i++;
        
        return i;
    }

    public int cantJugadores() {
        int cantidad=0;
        for(int i=0; i<15; i++)
            if(jugadores[i]!=null)
                cantidad++;
        return cantidad;
    }

    public void restarTransferencia() {
        transferenciasRestantes--;
    }

    public void sumarTransferencia(){
        transferenciasRestantes++;
    }

    public void setJugadores(Jugador[] clone) {
        jugadores=clone;
    }

    @Override
    public Object clone(){
        EquipoFantasia obj=null;
        try{
            obj=(EquipoFantasia)super.clone();
        }catch(CloneNotSupportedException ex){
            System.out.println(" no se puede duplicar");
        }
        obj.jugadores=(Jugador [])obj.jugadores.clone();
        return obj;
    }

    public int obtenerPuntajeTotalJugadores(int unNumeroFecha) {
        int puntaje=0;
        boolean sumoDefSuplente=false;
        boolean sumoVolSuplente=false;
        boolean sumoDelSuplente=false;
        for(int i=0; i<11; i++)
            if(jugadores[i].getCalificacionEnFecha(unNumeroFecha).GetJugoMasDe20())
                puntaje+=jugadores[i].getCalificacionTotal(unNumeroFecha-1);
            else
                switch(i){
                    case 0: if(jugadores[11].getCalificacionEnFecha(unNumeroFecha).GetJugoMasDe20())
                                puntaje+=jugadores[11].getCalificacionTotal(unNumeroFecha-1);
                                break;
                    case 1:
                    case 2:
                    case 3:
                    case 4: if(jugadores[12].getCalificacionEnFecha(unNumeroFecha).GetJugoMasDe20() && !sumoDefSuplente){
                                puntaje+=jugadores[12].getCalificacionTotal(unNumeroFecha-1);
                                sumoDefSuplente=true;
                            }
                            break;
                    case 5:
                    case 6:
                    case 7: if(jugadores[13].getCalificacionEnFecha(unNumeroFecha).GetJugoMasDe20() && !sumoVolSuplente){
                                puntaje+=jugadores[13].getCalificacionTotal(unNumeroFecha-1);
                                sumoVolSuplente=true;
                            }
                            break;
                    case 8:
                    case 9:
                    case 10: if(jugadores[14].getCalificacionEnFecha(unNumeroFecha).GetJugoMasDe20() && !sumoDelSuplente){
                                puntaje+=jugadores[14].getCalificacionTotal(unNumeroFecha-1);
                                sumoDelSuplente=true;
                            }
                            break;
                }

        return puntaje;
    }

}
